#!/bin/sh

set -e

# 等待数据库就绪
wait_for_db() {
    if [ "$DB_ENGINE" = "mysql" ]; then
        echo "等待 MySQL 数据库就绪..."
        while ! nc -z $MYSQL_HOST $MYSQL_PORT; do
            sleep 1
        done
        echo "MySQL 数据库已就绪"
    else
        # 创建空的数据库文件
        mkdir -p /opt/idcops/data/
        touch /opt/idcops/data/$SQLITE_DB_NAME && chmod 666 /opt/idcops/data/$SQLITE_DB_NAME
        echo "SQLite 数据库已就绪"
    fi
}

# 检查是否已经初始化
if [ ! -f "/opt/idcops/install.lock" ]; then
    echo "首次运行，开始初始化..."

    wait_for_db

    # 数据库迁移
    python manage.py collectstatic --no-input
    python manage.py makemigrations
    python manage.py migrate --noinput --verbosity 3

    # 获取容器IP地址
    CONTAINER_IP=$(hostname -i || ip route get 1 | awk '{print $NF;exit}')

    # 生成随机密码
    ADMIN_PASSWORD=$(tr -dc A-Za-z0-9 </dev/urandom | head -c 12)

    # 创建超级用户
    python manage.py shell << END
from django.contrib.auth import get_user_model
User = get_user_model()
if not User.objects.filter(username='admin').exists():
    User.objects.create_superuser('admin', 'admin@idcops.cn', '$ADMIN_PASSWORD')
    print("超级用户已创建。用户名: admin 密码: $ADMIN_PASSWORD")
else:
    print("超级用户 'admin' 已存在")
END

    # 记录信息到 install.log 文件
    {
        echo "容器IP地址: $CONTAINER_IP"
        echo "管理员用户名: admin"
        echo "管理员密码: $ADMIN_PASSWORD"
        echo "访问地址: http://$CONTAINER_IP/"  # 修改为 Nginx 地址
    } >> /opt/idcops/install.log

    echo "容器和超级用户信息已记录到 /opt/idcops/install.log 文件中"

    # 创建初始化完成标志文件
    touch /opt/idcops/install.lock
    echo "初始化完成"
else
    echo "检测到 install.lock 文件，跳过初始化步骤"
fi

# 检查并删除过时的 PID 文件
if [ -f /opt/idcops/run/idcops.pid ]; then
    echo "检测到过时的 PID 文件，删除中..."
    rm -f /opt/idcops/run/idcops.pid
fi

# 启动 Gunicorn
echo "启动 Gunicorn 服务器..."
exec gunicorn proj.wsgi:application --config /opt/idcops/config/gunicorn.py --pid /opt/idcops/run/idcops.pid

# 检查 Gunicorn 是否正常启动
check_gunicorn() {
    for i in {1..10}; do  # 尝试 10 次
        if curl -s -f http://$CONTAINER_IP:8000/; then  # 修改为 TCP 地址
            echo "Gunicorn 启动正常，应用可访问"
            return 0
        fi
        echo "等待 Gunicorn 启动..."
        sleep 2
    done
    echo "Gunicorn 启动失败，应用不可访问"
    exit 1
}

# 等待 Gunicorn 启动
check_gunicorn